/*
Problem Description
有个叫“猪头帮”的国家，采用一种简单的文法加密，他们所用的语言里面只有大写字母，没有其他任何字符；
现在还知道他们加密的方法是：只用一个大写字母和原文进行异或运算生成密文。请你帮忙解开。
Input
有若干组，每组输入有2行，第一行整数N表示有N个密文，接着一行有N个整数分别表示N个密文。
Output
输出仅有大写字母组成的原文。
Sample Input
30
17 6 9 8 3 0 1 6 7 4 5 10 11 8 9 14 15 12 13 18 19 16 17 22 23 20 21 26 27 24
Sample Output
SDKJABCDEFGHIJKLMNOPQRSTUVWXYZ
 */
package com.yuan.algorithms.training20150807;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.StreamTokenizer;

/**
 * @author YouYuan
 * @eMail E-mail:1265161633@qq.com
 * @Time 创建时间：2015年8月18日 下午3:31:46
 * @Explain 说明:利用异或的性质：a^b^b=a，暴力枚举出密码再推断原文即可
 */
public class 破译密码 {

	static StreamTokenizer in = new StreamTokenizer(new BufferedReader(
			new InputStreamReader(System.in)));

	public static void main(String[] args) throws IOException {
		while (in.nextToken() != in.TT_EOF) {
			int n = (int) in.nval;
			int[] data = new int[n];
			for (int i = 0; i < n; i++) {
				in.nextToken();
				data[i] = (int) in.nval;
			}
			int password;
			_p: for (password = 0; password < 26; password++) {
				char temp = (char) (password + 'A');
				for (int i = 0; i < n; i++) {
					if ((data[i] ^ temp) < 'A' || (data[i] ^ temp) > 'Z') {
						break;
					} else if (i == n - 1) {
						break _p;
					}
				}
			}
			for (int i = 0; i < n; i++) {
				System.out.print((char) (data[i] ^ (password + 'A')));
			}
			System.out.println();
		}
	}

}
